{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Darcy's Equation\n",
    "\n",
    "In this tutorial we will assume we have an incompressible fluid. Conservation of mass then gives us\n",
    "\\begin{equation}\n",
    "\\nabla v =  q,\n",
    "\\end{equation}\n",
    "where $v$ is the fluid velocity and $q$ any source term. \n",
    "\n",
    "A common assumption used for flow in porous media is the so called Darcy's law, which relates the flux field to the pressure gradient:\n",
    "\\begin{equation}\n",
    "v = -\\frac{K}{\\mu}\\nabla p\n",
    "\\end{equation}\n",
    "\n",
    "We innsert Darcy's law into the equation for conservation of mass to obtain an elliptic equation, which can be solved with respect to the pressure\n",
    "\n",
    "$$ - \\nabla \\cdot \\rho K \\nabla p = \\rho f $$\n",
    "with boundary conditions on $\\partial \\Omega_d$ and $\\partial \\Omega_n$:\n",
    "$$ p = p_b \\qquad - K \\nabla p \\cdot \\mathbf{n} = u_b$$\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import modules\n",
    "To solve this equation we need access to NumPy and PorePy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import porepy as pp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Generate grid\n",
    "We first solve the equation on a single cartesian grid, and will later add fractures to the grid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "g = pp.CartGrid([11, 11])\n",
    "g.compute_geometry()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Set parameters\n",
    "We create a parameter class and assign zero dirichlet boundary conditions, and a source term"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "param =  pp.Parameters(g)\n",
    "dir_bound = np.ravel(np.argwhere(g.tags['domain_boundary_faces']))\n",
    "bc_cond = pp.BoundaryCondition(g, dir_bound, ['dir']*dir_bound.size)\n",
    "\n",
    "src = np.zeros(g.num_cells)\n",
    "src[60] = 1\n",
    "\n",
    "param.set_bc('flow', bc_cond)\n",
    "param.set_source('flow', src)\n",
    "d = {'param': param}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Solve problem\n",
    "We can now create a Darcy object and solve the problem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Solve elliptic model\n",
      "Discretize\n",
      "Done. Elapsed time 0.009109258651733398\n",
      "Solve linear system using direct solver\n",
      "Done. Elapsed time 0.002156496047973633\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nmet0CZkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f48cc559b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "problem = pp.EllipticModel(g, d)\n",
    "p = problem.solve()\n",
    "pp.plot_grid(g, p)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Add fractures\n",
    "We now try to solve the same problem, but with a fracture in the domain. We create a multidimensional grid:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "f = np.array([[0,10],[5,5]])\n",
    "gb = pp.meshing.cart_grid([f], [10,10])\n",
    "gb.assign_node_ordering()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now make use of the DarcyData class to assign data to the fracture and matrix. We wish to set zero dirichlet boundary conditions. However, the data class assigns Neumann conditions by default, so we overload the bc function. We set a small aperture for the fracture, but a high permeability. Note that we let the FractureDomain innherit from the MatrixDomain. This way we assign the same parameters to the fractures as the matrix, unless we overload the parameter function(e.g., the permeabillity) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "class MatrixDomain(pp.EllipticDataAssigner):\n",
    "    def __init__(self, g, d):\n",
    "        pp.EllipticDataAssigner.__init__(self, g, d)\n",
    "\n",
    "    def bc(self):\n",
    "        dir_bound = np.ravel(np.argwhere(self.grid().tags['domain_boundary_faces']))\n",
    "        return pp.BoundaryCondition(self.grid(), dir_bound, ['dir']*dir_bound.size)\n",
    "\n",
    "class FractureDomain(MatrixDomain):\n",
    "    def __init(self, g, d):\n",
    "        MatrixDomain.__init__(self, g, d)\n",
    "        \n",
    "    def permeability(self):\n",
    "        kxx = 100 * np.ones(self.grid().num_cells)\n",
    "        return pp.SecondOrderTensor(2, kxx)\n",
    "    \n",
    "    def source(self):\n",
    "        val = np.ones(self.grid().num_cells)\n",
    "        val[round(self.grid().num_cells/2)] = 1\n",
    "        return val\n",
    "    \n",
    "    def aperture(self):\n",
    "        val = 0.01 * np.ones(self.grid().num_cells)\n",
    "        return val\n",
    "    \n",
    "def assign_darcy_data(gb):\n",
    "    gb.add_node_props(['problem'])\n",
    "    for g, d in gb:\n",
    "        if g.dim == 2:\n",
    "            d['problem'] = MatrixDomain(g, d)\n",
    "        else:\n",
    "            d['problem'] = FractureDomain(g, d)\n",
    "            \n",
    "    # We loop over the edges and assign coupling permeability\n",
    "    for e, d in gb.edges():\n",
    "        d['kn'] = 100"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are now ready to declare the problem and solve it"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Solve elliptic model\n",
      "Discretize\n",
      "Done. Elapsed time 0.0376279354095459\n",
      "Solve linear system using direct solver\n",
      "Done. Elapsed time 0.0019690990447998047\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f48ca2a3d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "assign_darcy_data(gb)\n",
    "problem = pp.EllipticModel(gb)\n",
    "problem.solve()\n",
    "problem.split('pressure')\n",
    "pp.plot_grid(gb, 'pressure')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Change discretization\n",
    "By default, the darcy solver uses the TPFA discretization for the fluxes. If we set an anisotropic permeability tensor, TPFA will not give a consistent discretization. In these cases we would like to use, e.g., the MPSA discretization. We can do this by overloading the flux_disc() function of the darcy solver. Note that we have already assigned data to the grid, so we do not have to do this again."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "class DarcyMPFA(pp.EllipticModel):\n",
    "    def __init__(self, gb):\n",
    "        pp.EllipticModel.__init__(self, gb)\n",
    "    \n",
    "    def flux_disc(self):\n",
    "        return pp.MpfaMixedDim()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Solve elliptic model\n",
      "Discretize\n",
      "Done. Elapsed time 1.8492999076843262\n",
      "Solve linear system using direct solver\n",
      "Done. Elapsed time 0.001363515853881836\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4934244630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "problem = DarcyMPFA(gb)\n",
    "problem.solve()\n",
    "problem.split('pressure')\n",
    "pp.plot_grid(gb, 'pressure')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
